threadFunction=
function
()
while
simGetSimulationState()~=sim_simulation_advancing_abouttostop
do
message,auxiliaryData=simGetSimulatorMessage()
while
message~=-1
do
if
(message==sim_message_keypress)
then
if
(auxiliaryData[1]==2007)
then
desiredWheelRotSpeed=desiredWheelRotSpeed+wheelRotSpeedDx
end
if
(auxiliaryData[1]==2008)
then
desiredWheelRotSpeed=desiredWheelRotSpeed-wheelRotSpeedDx
end
if
(auxiliaryData[1]==2009)
then
desiredSteeringAngle=desiredSteeringAngle+steeringAngleDx
if
(desiredSteeringAngle>45*
math.pi
/180)
then
desiredSteeringAngle=45*
math.pi
/180
end
end
if
(auxiliaryData[1]==2010)
then
desiredSteeringAngle=desiredSteeringAngle-steeringAngleDx
if
(desiredSteeringAngle<-45*
math.pi
/180)
then
desiredSteeringAngle=-45*
math.pi
/180
end
end
end
message,auxiliaryData=simGetSimulatorMessage()
end
steeringAngleLeft=
math.atan
(l/(-d+l/
math.tan
(desiredSteeringAngle)))
steeringAngleRight=
math.atan
(l/(d+l/
math.tan
(desiredSteeringAngle)))
simSetJointTargetPosition(steeringLeft,steeringAngleLeft)
simSetJointTargetPosition(steeringRight,steeringAngleRight)
simSetJointTargetVelocity(motorLeft,desiredWheelRotSpeed)
simSetJointTargetVelocity(motorRight,desiredWheelRotSpeed)
simSwitchThread()
end
end
steeringLeft=simGetObjectHandle(
'Steer_left_joint'
)
steeringRight=simGetObjectHandle(
'Steer_right_joint'
)
motorLeft=simGetObjectHandle(
'Front_left_joint'
)
motorRight=simGetObjectHandle(
'Front_right_joint'
)
desiredSteeringAngle=0
desiredWheelRotSpeed=0
steeringAngleDx=2*
math.pi
/180
wheelRotSpeedDx=20*
math.pi
/180
d=0.755
l=2.5772
res,err=
xpcall
(threadFunction,
function
(err)
return
debug.traceback
(err)
end
)
if
not
res
then
simAddStatusbarMessage(
'Lua runtime error: '
..err)
end